package controllers

import (
	"marx/models"

	"github.com/astaxie/beego/context"

	"github.com/astaxie/beego"
)

type LoginController struct {
	beego.Controller
}

// 参数
// 当exit参数的值为true
func (this *LoginController) Get() {
	isExit := this.Input().Get("exit") == "true"
	if isExit {
		this.Ctx.SetCookie("uname", "", -1, "/")
		this.Ctx.SetCookie("pwd", "", -1, "/")
		this.Redirect("/", 302)
		return
	}
	this.TplName = "login.html"
}

// 登录Post
// 需要的三个参数：
// name：用户名
// pwd：密码
// autologin：是否自动登录
func (this *LoginController) Post() {
	name := this.Input().Get("name")
	pwd := this.Input().Get("pwd")
	autologin := this.Input().Get("autologin") == "on"
	status, _ := models.Login(name, pwd)

	cookieAge := 0

	if status == 0 {
		if autologin {
			cookieAge = 1<<31 - 1
		}
		this.Ctx.SetCookie("name", name, cookieAge, "/")
		this.Ctx.SetCookie("pwd", pwd, cookieAge, "/")
		codejson := Message{0, nil, "登陆成功"}
		this.Data["json"] = codejson
		this.ServeJSON()
		this.Redirect("/", 302)
		return
	} else {
		var codejson interface{}
		switch status {
		case 1:
			codejson = Message{1, nil, "密码错误"}
		case 2:
			codejson = Message{1, nil, "用户不存在"}
		case 3:
			codejson = Message{1, nil, "未知错误"}
		case 4:
			codejson = Message{1, nil, "尚未激活"}
		}
		this.Data["json"] = codejson
		this.ServeJSON()
		// this.Redirect("/login", 302)
		return
	}
}

// 激活账号
func (this *LoginController) Activate() {
	name := this.Input().Get("name")
	email := this.Input().Get("email")
	number := this.Input().Get("number")
	status := models.Activate(name, email, number)
	// 返回参数：
	// 0：激活成功
	// 1：激活失败，用户不存在
	// 2：激活失败，用户已经激活
	// 3：激活失败，没有找到激活信息
	var codejson interface{}
	switch status {
	case 0:
		codejson = Message{0, nil, "激活成功"}
	case 1:
		codejson = Message{1, nil, "激活失败，用户不存在"}
	case 2:
		codejson = Message{1, nil, "激活失败，用户已经激活"}
	case 3:
		codejson = Message{1, nil, "激活失败，没有找到激活信息"}
	}
	this.Data["json"] = codejson
	this.ServeJSON()
	this.Redirect("", 302)
	return
}

//检查输入的邮箱是否是用户注册的使用的邮箱
func (this *LoginController) Checkemail() {

}

//找回密码
func (this *LoginController) Resetpassword() {
	// name := this.Input().Get("name")
	// number := this.Input().Get("number")
}

// 是否已经登录
func (this *LoginController) IsLogin() {
	ctx := this.Ctx
	name, pwd, flag := checkAccount(ctx)

	var codejson interface{}

	if flag == false {
		codejson = Message{1, nil, "尚未登录"}
	} else {
		status, _ := models.Login(name, pwd)
		if status != 0 {
			codejson = Message{1, nil, "尚未登录"}
		}
		codejson = Message{0, nil, "已经登录"}
	}
	this.Data["json"] = codejson
	this.ServeJSON()
	this.Redirect("", 302)
	return
}

func checkAccount(ctx *context.Context) (string, string, bool) {
	// name := ctx.GetCookie("name")
	// if name == "" {
	// 	return "", "", false
	// }
	// pwd := ctx.GetCookie("pwd")
	// if pwd == "" {
	// 	return "", "", false
	// }
	name := "geange"
	pwd := "chen1995"
	status, _ := models.Login(name, pwd)
	if status != 0 {
		return "", "", false
	}
	return name, pwd, true
}
